Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Dynamic Link Library</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Dynamic_Link_Library"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Dynamic_Link_Library rootpage-Dynamic_Link_Library skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Dynamic Link Library</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><table class="infobox float-right toptextcells hintergrundfarbe1" id="vorlage-infobox-dateiformat" summary="Infobox Dateiformat" style="width:23em; margin: 0 0 1em 1em; border:solid 1px #BBBBBB; font-size: 90%; padding:2px;">

<tbody><tr>
<th colspan="2">Dynamic Link Library
</th></tr>
<tr>
<td colspan="2" style="text-align:center;"><span typeof="mw:File"></span>
</td></tr>




<tr>
<td style="white-space: nowrap;"><a href="Dateinamenserweiterung" title="Dateinamenserweiterung">Dateiendung</a>:
</td>
<td><code style="margin:0.2em 0; padding:0;">.dll, .DLL</code>
</td></tr>
<tr>
<td style="white-space:nowrap;"><a href="Internet_Media_Type" title="Internet Media Type">MIME-Type</a>:
</td>
<td><code style="margin:0.2em 0; padding:0;">application/vnd.microsoft.portable-executable,<br>application/x-msdownload,<br>application/octet-stream</code>
</td></tr>


<tr>
<td style="white-space: nowrap;">Entwickelt von:
</td>
<td><a href="Microsoft" title="Microsoft">Microsoft</a>
</td></tr>




<tr>
<td style="white-space: nowrap;">Art:
</td>
<td>dynamische Bibliothek
</td></tr>












<tr>
<td colspan="2" style="display:none">
<p>
</p><p><br>


</p>
</td></tr>
<tr>
<td colspan="2">
</td></tr></tbody></table>
<p><b>Dynamic Link Library</b> (aus dem <a href="Amerikanisches_Englisch" title="Amerikanisches Englisch">Englischen</a> entlehnt; kurz <b>DLL</b>) bezeichnet allgemein eine <a href="Programmbibliothek#Dynamische_Bibliotheken" title="Programmbibliothek">dynamische Programmbibliothek</a>; meist bezieht sich der Begriff jedoch auf die für die <a href="Betriebssystem" title="Betriebssystem">Betriebssysteme</a> <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a> und <a href="OS/2" title="OS/2">OS/2</a> verwendete Variante.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>DLL-<a href="Datei" title="Datei">Dateien</a> verwenden das auch für ausführbare <a href="EXE" title="EXE">EXE</a>-Dateien gebräuchliche <a href="Dateiformat" title="Dateiformat">Dateiformat</a>, das in 16-Bit-Programmen das <a href="New_Executable" title="New Executable">New-Executable</a>-Format,<sup id="cite_ref-NE_3-0" class="reference"><a href="#cite_note-NE-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> in 16- und 32-Bit-Programmen das <a href="Linear_Executable" class="mw-redirect" title="Linear Executable">Linear-Executable</a>-Format sowie in 32- und 64-Bit-Programmen das <a href="Portable_Executable" title="Portable Executable">Portable-Executable</a>-Format ist. Diese Dateien können Programmcode (<a href="Maschinensprache" title="Maschinensprache">Maschinencode</a>), Daten und <a href="Ressource_(Software)" title="Ressource (Software)">Ressourcen</a> in beliebiger Kombination enthalten.
</p><p>Die Windows-<a href="Dateinamenserweiterung" title="Dateinamenserweiterung">Dateinamenserweiterung</a> für solche Bibliotheken ist gewöhnlich <code>DLL</code>. Zudem können es jedoch auch andere Dateiendungen, wie <code>CPL</code> (für die <a href="Systemsteuerung" title="Systemsteuerung">Systemsteuerung</a>), <code>OCX</code> (für Bibliotheken mit <a href="ActiveX" title="ActiveX">ActiveX</a>-Steuerelementen) oder auch <code>DRV</code> (für <a href="Ger%C3%A4tetreiber" title="Gerätetreiber">Treiber</a>), sein.
</p>

<div class="mw-heading mw-heading2"><h2 id="Hintergrund">Hintergrund</h2></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→&nbsp;</span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="Programmbibliothek" title="Programmbibliothek">Programmbibliothek</a></i></div>
<p>Der Hauptzweck von DLL-Dateien ist, den von Anwendungen auf der Festplatte und im Hauptspeicher benötigten Speicherplatz zu reduzieren. Code und Daten, die von mehr als einer Anwendung benötigt werden könnten, werden deshalb in einer einzelnen Datei auf der <a href="Massenspeicher" title="Massenspeicher">Festplatte</a> gespeichert und nur einmal in den Hauptspeicher geladen, wenn mehrere Programme dieselbe Programmbibliothek benötigen.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Weitere_Vorteile">Weitere Vorteile</h3></div>
<p>Wird ein Stück Programmcode verbessert, müssen nicht alle Programme geändert werden, die diesen Code nutzen, sondern es genügt, ihn in der DLL zu aktualisieren. Alle Programme können in diesem Fall auf die aktualisierte Fassung zugreifen. Dadurch ist es Softwareentwicklern möglich, relativ kleine <a href="Patch_(Software)" title="Patch (Software)">Patches</a> für größere Softwarepakete herauszugeben, beispielsweise auch für ganze Betriebssysteme. Ein ganzes Paket kann so durch die Aktualisierung einzelner DLLs auf den neuesten Stand gebracht werden.
</p><p>In Form von <a href="Plug-in" title="Plug-in">Plug-ins</a> können mit DLLs neue Programmteile für ein bereits bestehendes Programm erstellt und darin nahtlos integriert werden, ohne dass am schon existierenden Programm Veränderungen vorgenommen werden müssten. Diese Idee der dynamischen „Einbindbarkeit“ wird zum Beispiel unter Windows durch <a href="ActiveX" title="ActiveX">ActiveX</a> realisiert.
</p><p>Auch können durch solch einen modularen Aufbau nicht benötigte Funktionen einfach deaktiviert werden.
</p>
<div class="mw-heading mw-heading3"><h3 id="Schwächen"><span id="Schw.C3.A4chen"></span>Schwächen</h3></div>
<p>Ein bei Windows auch <a href="DLL-Konflikt" title="DLL-Konflikt">DLL-Konflikt</a> genanntes Problem tritt auf, wenn mehrere Anwendungen verschiedene Versionen der gleichen DLL benötigen. Falls einem Programm die erforderliche Version fehlt, kann das zu Problemen, wie fehlerhaften Installationen, führen. Dieser Konflikt kann oft behoben werden, indem die jeweils richtige Version der Programmbibliothek in den Programmordner des jeweiligen Programms kopiert wird. Der Effekt der Speicherersparnis wird dadurch allerdings wieder zunichtegemacht. Mit <a href="Microsoft_.NET" class="mw-redirect" title="Microsoft .NET">Microsoft .NET</a> ist es möglich, Versionskonflikte bei DLL-Dateien zu umgehen, indem sie die gleichzeitige Existenz von mehreren Versionen einer Programmbibliothek ermöglichen. Dies ist aber nur für mit .NET entwickelte DLL-Dateien möglich.
</p><p>In bestimmten Fällen ist <a href="DLL_Hijacking" title="DLL Hijacking">DLL Hijacking</a> oder die bösartige Nutzung von <a href="DLL-Injection" title="DLL-Injection">DLL-Injection</a> möglich.
</p>
<div class="mw-heading mw-heading2"><h2 id="Betriebssysteminterne_Behandlung">Betriebssysteminterne Behandlung</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Laden_von_DLLs_bei_einem_Programmstart">Laden von DLLs bei einem Programmstart</h3></div>
<p>Wenn ein Programm ausgeführt werden soll, dann wird es vom Loader des Betriebssystems in den Speicher geladen und die „Import-Tabelle“ des Programms ausgelesen. In dieser Tabelle befinden sich alle DLL-Befehls-Namen oder die Ordnungszahlen der DLL-Befehle, die von diesem Programm benötigt werden. Der Loader lädt nun die fehlenden DLLs in den Speicher und fügt in der Import-Tabelle des Programms die Einsprungadressen der einzelnen Befehle ein.
</p>
<div class="mw-heading mw-heading3"><h3 id="DLL-Datei-Aufbau">DLL-Datei-Aufbau</h3></div>
<p>Eine DLL hat (nach dem <a href="MZ-Datei" title="MZ-Datei">MZ-Header</a>) denselben <a href="New_Executable" title="New Executable">NE</a>-, <a href="Linear_Executable" class="mw-redirect" title="Linear Executable">LE/LX</a>- oder <a href="Portable_Executable" title="Portable Executable">PE</a>-Header wie eine normale <a href="Ausf%C3%BChrbare_Datei" title="Ausführbare Datei">ausführbare Datei</a>, nur ist im Falle einer NE der DWORD-Flag an der Adresse 0C<sub>hex</sub> im NE-Header auf 8000<sub>hex</sub> gesetzt (Library Module flag)<sup id="cite_ref-NE_3-1" class="reference"><a href="#cite_note-NE-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> beziehungsweise im PE-Header im <i>Characteristics</i>-Wert das <i>IMAGE_FILE_DLL</i>-Bit gesetzt. Während sowohl DLLs als auch ausführbare Dateien eine „Export-Tabelle“ besitzen können, wird dies bei letzteren selten benutzt. In dieser Export-Tabelle sind alle Namen der Funktionen und Variablen aufgelistet, die die DLL an externe Software zur Verfügung stellt. Diese Namen müssen alphabetisch sortiert sein, damit der Loader sie finden kann.
</p>
<div class="mw-heading mw-heading3"><h3 id="Aufruf_eines_DLL-Befehles_durch_ein_Programm">Aufruf eines DLL-Befehles durch ein Programm</h3></div>
<p>Zuerst werden die zu übergebenden Werte – sinngemäß wie bei anderen <a href="Unterprogramm" title="Unterprogramm">Unterprogrammen</a> – auf dem <a href="Stapelspeicher" title="Stapelspeicher">Stack</a> abgelegt, dann wird ein indirekter Sprung auf den Wert der vom Loader in der Import-Tabelle hinterlegten DLL-Adresse durchgeführt.
</p>
<div class="mw-heading mw-heading3"><h3 id="DLLs_im_Speicher">DLLs im Speicher</h3></div>
<p>Es gibt zwei verschiedene Varianten, wie DLLs vom Betriebssystem in den Speicher geladen werden können. Es gibt statische DLLs, die nur einmal geladen werden. Alle Programme greifen dann auf diese eine Instanz der DLL zu. Diese DLL besitzt dann nur einen einzigen globalen Speicherbereich. Die Windows-Kernel-DLLs sind solche statischen DLLs, was ihnen erlaubt, das gesamte System zu verwalten (z.&nbsp;B. alle offenen Dateien zu überwachen).
Eine andere Variante DLLs im Speicher zu verwalten, ist die, dass jedes Mal, wenn ein neues Programm eine DLL benötigt, eine neue Instanz von dieser in den Speicher geladen wird.
</p><p>Ob eine DLL statisch ist oder nicht, legt ein weiteres Flag im Header der DLL fest.
</p>
<div class="mw-heading mw-heading3"><h3 id="DLL-Instanzenzähler"><span id="DLL-Instanzenz.C3.A4hler"></span>DLL-Instanzenzähler</h3></div>
<p>Jedes Mal, wenn eine DLL von einem Programm geladen wird, wird ein interner Instanzenzähler für diese DLL erhöht. Über diesen Zähler kann das System erkennen, ob eine DLL noch in Verwendung ist oder entladen werden kann. Letzteres geschieht, wenn der Instanzenzähler null erreicht, da das letzte laufende Programm, welches die DLL benutzt hat, die DLL entladen hat und diese nicht weiter im Speicher vorgehalten werden muss.
</p>
<div class="mw-heading mw-heading2"><h2 id="Programmierbeispiele_für_32-Bit_Windows"><span id="Programmierbeispiele_f.C3.BCr_32-Bit_Windows"></span>Programmierbeispiele für 32-Bit Windows</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Arbeiten_mit_DLLs_in_Visual_C++"><span id="Arbeiten_mit_DLLs_in_Visual_C.2B.2B"></span>Arbeiten mit DLLs in Visual C++</h3></div>
<div class="mw-heading mw-heading4"><h4 id="Erstellen_einer_DLL_mit_einer_Funktion">Erstellen einer DLL mit einer Funktion</h4></div>
<p>Die DLL-Schnittstelle wird mit Hilfe der Export-Funktion <code>__declspec(dllexport)</code> definiert.<br>
Dies wird im folgenden Beispiel demonstriert:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// Nur unter Microsoft Visual C++ hat das Makro "DLL" eine Funktion.</span>
<span class="c1">// Unter zum Beispiel Linux ist das Makro "DLL" leer.</span>

<span class="cp">#if defined(_MSC_VER)</span>
<span class="w"> </span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;windows.h&gt;</span>
<span class="w"> </span><span class="cp">#define DLL extern "C" __declspec(dllexport)</span>
<span class="cp">#else</span>
<span class="w"> </span><span class="cp">#define DLL</span>
<span class="cp">#endif</span>

<span class="c1">// Die Funktion, die anderen Programmen zur Verfügung gestellt werden soll</span>
<span class="c1">// (in diesem Beispiel: Addieren zweier Zahlen)</span>

<span class="n">DLL</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">AddNumbers</span><span class="w"> </span><span class="p">(</span><span class="kt">double</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">b</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>Dieses Beispiel erzeugt beim Kompilieren sowohl eine <code>DLL</code> als auch eine <code>LIB</code>-Datei.
</p>
<div class="mw-heading mw-heading4"><h4 id="Einbinden_einer_DLL_und_Aufrufen_dieser_Funktion">Einbinden einer DLL und Aufrufen dieser Funktion</h4></div>
<p>DLL-Funktionen können einfach aufgerufen werden, nachdem man sie mit der Funktion <code>__declspec(dllimport)</code> importiert hat.
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;windows.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>

<span class="c1">// Importieren der Funktion aus der oben erstellten DLL</span>
<span class="k">extern</span><span class="w"> </span><span class="s">"C"</span><span class="w"> </span><span class="kr">__declspec</span><span class="p">(</span><span class="n">dllimport</span><span class="p">)</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">AddNumbers</span><span class="w"> </span><span class="p">(</span><span class="kt">double</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="p">;</span>

<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="c1">// Aufrufen der externen Funktion</span>
<span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AddNumbers</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="p">;</span>

<span class="w"> </span><span class="n">printf</span><span class="w"> </span><span class="p">(</span><span class="s">"Das Ergebnis ist: %f</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">result</span><span class="p">)</span><span class="w"> </span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>Zu beachten ist, dass der Linker die LIB-Datei benötigt und dass sich die DLL-Datei im selben Ordner wie das Programm, das sie aufrufen soll, befinden sollte. Die LIB-Datei wird vom Linker benötigt, damit er „Platzhalter“ für die später aus der DLL aufgerufenen Funktionen einbauen kann.
</p>
<div class="mw-heading mw-heading4"><h4 id="Einbinden_einer_DLL_zur_Laufzeit_und_Aufrufen_dieser_Funktion">Einbinden einer DLL zur Laufzeit und Aufrufen dieser Funktion</h4></div>
<p>DLL-Bibliotheken können auf zwei verschiedene Weisen in eine Anwendung geladen werden: entweder gleich beim Starten des Programms (so wie in den obigen Beispielen beschrieben) oder erst später während der Laufzeit, indem man die <a href="Programmierschnittstelle" title="Programmierschnittstelle">API</a>-Funktionen <code>LoadLibrary</code>, <code>GetProcAddress</code> und <code>FreeLibrary</code> verwendet. Die Art und Weise, wie DLLs während der Laufzeit einzubinden sind, ist in jeder Programmiersprache gleich, solange man eine <a href="Windows_API" class="mw-redirect" title="Windows API">Windows-API</a>-Funktion importieren möchte. Der folgende Code demonstriert das anhand eines VC++-Beispieles:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;windows.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>

<span class="c1">// Definition des Types der DLL-Funktion, die verwendet werden soll</span>
<span class="k">typedef</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">BinaryFunction_t</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="kt">double</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="p">)</span><span class="w"> </span><span class="p">;</span>

<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">BinaryFunction_t</span><span class="w"> </span><span class="n">AddNumbers</span><span class="w"> </span><span class="p">;</span>
<span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="p">;</span>
<span class="w"> </span><span class="n">BOOL</span><span class="w"> </span><span class="n">fFreeResult</span><span class="w"> </span><span class="p">;</span>

<span class="w"> </span><span class="c1">// DLL-Datei laden</span>
<span class="w"> </span><span class="n">HINSTANCE</span><span class="w"> </span><span class="n">hinstLib</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LoadLibrary</span><span class="w"> </span><span class="p">(</span><span class="s">"MyDll.dll"</span><span class="p">)</span><span class="w"> </span><span class="p">;</span>

<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">hinstLib</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Die Einsprungadresse abfragen</span>
<span class="w"> </span><span class="n">AddNumbers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">BinaryFunction_t</span><span class="p">)</span><span class="w"> </span><span class="n">GetProcAddress</span><span class="w"> </span><span class="p">(</span><span class="n">hinstLib</span><span class="p">,</span><span class="w"> </span><span class="s">"AddNumbers"</span><span class="p">)</span><span class="w"> </span><span class="p">;</span>

<span class="w"> </span><span class="c1">// Die Funktion aufrufen</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">AddNumbers</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">)</span>
<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">AddNumbers</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="p">;</span>

<span class="w"> </span><span class="c1">// Die DLL-Datei wieder entladen</span>
<span class="w"> </span><span class="n">fFreeResult</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FreeLibrary</span><span class="w"> </span><span class="p">(</span><span class="n">hinstLib</span><span class="p">)</span><span class="w"> </span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="c1">// Das Ergebnis anzeigen</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">hinstLib</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">AddNumbers</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span>
<span class="w"> </span><span class="n">printf</span><span class="w"> </span><span class="p">(</span><span class="s">"Fehler: Konnte die Funktion nicht aufrufen</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span><span class="w"> </span><span class="p">;</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="n">printf</span><span class="w"> </span><span class="p">(</span><span class="s">"Das Ergebnis ist: %f</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">result</span><span class="p">)</span><span class="w"> </span><span class="p">;</span>

<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>Die <code>LIB</code>-Datei wird in diesem Fall nicht benötigt. Die <code>DLL</code>-Datei muss aber immer noch in einem Ordner liegen, der dem Programm zugänglich ist.
</p><p>Zu beachten ist außerdem, dass beim Versuch, eine nicht vorhandene DLL direkt beim Programmstart automatisch mitladen zu lassen, vom Betriebssystem eine Fehlermeldung angezeigt und das Programm beendet wird, ohne dass der Programmierer eine Möglichkeit hat, diesen Fehler abzufangen. Beim Einbinden von DLLs während der Laufzeit können Fehler beim Laden hingegen abgefangen werden.
</p>
<div class="mw-heading mw-heading3"><h3 id="Verwenden_von_DLLs_in_Object_Pascal">Verwenden von DLLs in Object Pascal</h3></div>
<div class="mw-heading mw-heading4"><h4 id="Erstellen_einer_DLL">Erstellen einer DLL</h4></div>
<p>Im Kopf des Quellcodes muss das Schlüsselwort <code>library</code> an Stelle von <code>program</code> verwendet werden. Am Ende der Datei werden dann die zu exportierenden Funktionen im <code>exports</code>-Bereich aufgelistet:
</p>
<div class="mw-highlight mw-highlight-lang-delphi mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">library</span><span class="w"> </span><span class="n">Beispiel</span><span class="o">;</span>

<span class="w"> </span><span class="c1">// Die Funktion, die anderen Programmen zur Verfügung gestellt werden soll</span>
<span class="w"> </span><span class="c1">// (in diesem Beispiel: Addieren zweier Zahlen)</span>
<span class="w"> </span><span class="k">function</span><span class="w"> </span><span class="nf">AddNumbers</span><span class="p">(</span><span class="n">a</span><span class="o">,</span><span class="w"> </span><span class="n">b</span><span class="o">:</span><span class="w"> </span><span class="kt">Double</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">Double</span><span class="o">;</span><span class="w"> </span><span class="kp">cdecl</span><span class="o">;</span>
<span class="w"> </span><span class="k">begin</span>
<span class="w"> </span><span class="bp">Result</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">b</span><span class="o">;</span>
<span class="w"> </span><span class="k">end</span><span class="o">;</span>

<span class="w"> </span><span class="c1">// Exportieren der Funktion</span>
<span class="w"> </span><span class="k">exports</span>
<span class="w"> </span><span class="n">AddNumbers</span><span class="o">;</span>

<span class="w"> </span><span class="c1">// In diesem Fall muss kein spezieller Initialisierungs-Quellcode angegeben werden</span>
<span class="w"> </span><span class="k">begin</span>
<span class="w"> </span><span class="k">end</span><span class="o">.</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Eine_DLL_einbinden_/_aufrufen"><span id="Eine_DLL_einbinden_.2F_aufrufen"></span>Eine DLL einbinden / aufrufen</h4></div>
<p>Delphi benötigt keine <code>LIB</code>-Dateien, um eine Funktion korrekt importieren zu können. Zum Einbinden einer DLL muss lediglich das Schlüsselwort <code>external</code> verwendet werden:
</p>
<div class="mw-highlight mw-highlight-lang-delphi mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">program</span><span class="w"> </span><span class="n">Beispiel</span><span class="o">;</span>
<span class="w"> </span><span class="cm">{$APPTYPE CONSOLE}</span>

<span class="w"> </span><span class="c1">// Importieren der Funktion aus einer externen DLL</span>
<span class="w"> </span><span class="k">function</span><span class="w"> </span><span class="nf">AddNumbers</span><span class="p">(</span><span class="n">a</span><span class="o">,</span><span class="w"> </span><span class="n">b</span><span class="o">:</span><span class="w"> </span><span class="kt">Double</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">Double</span><span class="o">;</span><span class="w"> </span><span class="kp">cdecl</span><span class="o">;</span><span class="w"> </span><span class="kp">external</span><span class="w"> </span><span class="s">'Beispiel.dll'</span><span class="o">;</span>

<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="bp">result</span><span class="o">:</span><span class="w"> </span><span class="kt">Double</span><span class="o">;</span>
<span class="w"> </span><span class="k">begin</span>
<span class="w"> </span><span class="bp">result</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="n">AddNumbers</span><span class="p">(</span><span class="mi">1</span><span class="o">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="o">;</span>
<span class="w"> </span><span class="nb">Writeln</span><span class="p">(</span><span class="s">'Das Ergebnis ist: '</span><span class="o">,</span><span class="w"> </span><span class="bp">result</span><span class="p">)</span>
<span class="w"> </span><span class="k">end</span><span class="o">.</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="DLLs_in_Visual_Basic_Classic_verwenden">DLLs in Visual Basic Classic verwenden</h3></div>
<p>Von VB bis zur Version 6 wird nur das Laden von DLLs während der Laufzeit unterstützt. Zusätzlich zur Verwendung der API-Funktionen <code>LoadLibrary</code> und <code>GetProcAddress</code> ist es in Visual Basic aber möglich, externe DLL-Funktionen zu <i>deklarieren</i>, was für den Entwickler diese Arbeit um einiges einfacher macht:
</p>
<div class="mw-highlight mw-highlight-lang-vbscript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">Option</span><span class="w"> </span><span class="k">Explicit</span><span class="w"> </span><span class="n">On</span>
<span class="w"> </span><span class="n">Declare</span><span class="w"> </span><span class="kd">Function</span><span class="w"> </span><span class="nf">AddNumbers</span><span class="w"> </span><span class="n">Lib</span><span class="w"> </span><span class="s2">"Example.dll"</span><span class="w"> </span><span class="p">(</span><span class="k">ByVal</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">As</span><span class="w"> </span><span class="n">Double</span><span class="p">,</span><span class="w"> </span><span class="k">ByVal</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="n">As</span><span class="w"> </span><span class="n">Double</span><span class="p">)</span><span class="w"> </span><span class="n">As</span><span class="w"> </span><span class="n">Double</span>

<span class="w"> </span><span class="kd">Sub</span><span class="w"> </span><span class="nf">Main</span><span class="p">()</span>
<span class="w"> </span><span class="kd">Dim</span><span class="w"> </span><span class="nv">Result</span><span class="w"> </span><span class="n">As</span><span class="w"> </span><span class="n">Double</span>
<span class="w"> </span><span class="n">Result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AddNumbers</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="nb">Debug</span><span class="p">.</span><span class="n">Print</span><span class="w"> </span><span class="s2">"Das Ergebnis ist: "</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="n">Result</span>
<span class="w"> </span><span class="k">End</span><span class="w"> </span><span class="k">Sub</span>
</pre></div>
<p>Wenn beim Laden der DLL-Funktion ein Fehler auftritt, löst VB einen Laufzeitfehler aus. Dieser kann aber abgefangen und behandelt werden. Weiterhin muss man die <a href="Aufrufkonvention" title="Aufrufkonvention">Aufrufkonvention</a> der exportierten Funktion beachten: Visual Basic nimmt an, dass die Funktion <a href="Aufrufkonvention#stdcall" title="Aufrufkonvention">_stdcall</a> ist. Deshalb war bis VB7 der Import von <a href="Aufrufkonvention#cdecl" title="Aufrufkonvention">_cdecl</a>-Funktionen nur über eine zwischengeschaltete <a href="Wrapper_(Software)" title="Wrapper (Software)">Wrapper</a>-DLL möglich.
</p>
<div class="mw-heading mw-heading3"><h3 id="Win32-DLLs_im_.Net-Framework_verwenden">Win32-DLLs im .Net-Framework verwenden</h3></div>
<p>In .NET werden DLLs mithilfe des DllImport-Attributs eingebunden. Dazu ist der Namespace „System.Runtime.InteropServices“ nötig. Der <a href="Funktionsprototyp" title="Funktionsprototyp">Funktionsprototyp</a> wird in <a href="C-Sharp" title="C-Sharp">C#</a> als „extern“ angegeben, was in <a href="VB.NET" class="mw-redirect" title="VB.NET">VB.NET</a> nicht nötig ist, anschließend kann die Funktion wie jede andere angesprochen werden:
</p>
<div class="mw-heading mw-heading4"><h4 id="C#"><span id="C.23"></span>C#</h4></div>
<div class="mw-highlight mw-highlight-lang-csharp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="nn">System</span><span class="p">;</span>
<span class="k">using</span><span class="w"> </span><span class="nn">System.Runtime.InteropServices</span><span class="p">;</span>

<span class="k">namespace</span><span class="w"> </span><span class="nn">DllImportBeispiel</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">Program</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="na">[DllImport("Example.dll")]</span>
<span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">extern</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="nf">AddNumbers</span><span class="p">(</span><span class="kt">double</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">b</span><span class="p">);</span>

<span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">Main</span><span class="p">()</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="w"> </span><span class="n">AddNumbers</span><span class="p">(</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="VB.NET">VB.NET</h4></div>
<div class="mw-highlight mw-highlight-lang-vbnet mw-content-ltr" dir="ltr"><pre><span></span><span class="k">Imports</span><span class="w"> </span><span class="nn">System.Runtime.InteropServices</span>

<span class="k">Class</span><span class="w"> </span><span class="nc">Program</span>
<span class="w"> </span><span class="o">&lt;</span><span class="n">DllImport</span><span class="p">(</span><span class="s">"Example.dll"</span><span class="p">)</span><span class="o">&gt;</span><span class="w"> </span>_
<span class="w"> </span><span class="k">Private</span><span class="w"> </span><span class="k">Shared</span><span class="w"> </span><span class="k">Function</span><span class="w"> </span><span class="nf">AddNumbers</span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="ow">As</span><span class="w"> </span><span class="kt">Double</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="ow">As</span><span class="w"> </span><span class="kt">Double</span><span class="p">)</span><span class="w"> </span><span class="ow">As</span><span class="w"> </span><span class="kt">Double</span>
<span class="w"> </span><span class="k">End</span><span class="w"> </span><span class="k">Function</span>

<span class="w"> </span><span class="k">Private</span><span class="w"> </span><span class="k">Shared</span><span class="w"> </span><span class="k">Sub</span><span class="w"> </span><span class="nf">Main</span><span class="p">()</span>
<span class="w"> </span><span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="n">AddNumbers</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">))</span>
<span class="w"> </span><span class="k">End</span><span class="w"> </span><span class="k">Sub</span>
<span class="k">End</span><span class="w"> </span><span class="k">Class</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Direkte_Einbindung_von_DLLs_in_Visual_Studio">Direkte Einbindung von DLLs in Visual Studio</h4></div>
<p>Wenn jedoch auf mehrere Methoden oder Funktionen einer DLL zugegriffen werden soll, kann diese auch über den Projekt Explorer von <a href="Visual_Studio" title="Visual Studio">Visual Studio</a> direkt eingebunden werden.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> Anschließend können die Funktionen der DLL verwendet werden, indem man entweder im Code den vollständigen Namespace vor der Klasse der Methode angibt, oder indem man mit using (C#) beziehungsweise Imports (VB.Net) den Namespace direkt einbindet. Bei dieser Vorgehensweise wird der System.Runtime.InteropServices Namespace nicht benötigt.
</p><p>Im Folgenden ist obiges Beispiel mit direkt eingebundener DLL veranschaulicht (der Namespace entspricht hier dem Namen der DLL):
</p>
<div class="mw-heading mw-heading5"><h5 id="C#_2"><span id="C.23_2"></span>C#</h5></div>
<div class="mw-highlight mw-highlight-lang-c# mw-content-ltr" dir="ltr"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="nn">Example</span><span class="p">;</span>

<span class="k">class</span><span class="w"> </span><span class="nc">Program</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">Main</span><span class="p">()</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="n">AddNumbers</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">));</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading5"><h5 id="VB.Net_2">VB.Net</h5></div>
<div class="mw-highlight mw-highlight-lang-vb.net mw-content-ltr" dir="ltr"><pre><span></span><span class="k">Imports</span><span class="w"> </span><span class="nn">Example</span>

<span class="k">Class</span><span class="w"> </span><span class="nc">Program</span>
<span class="w"> </span><span class="k">Private</span><span class="w"> </span><span class="k">Shared</span><span class="w"> </span><span class="k">Sub</span><span class="w"> </span><span class="nf">Main</span><span class="p">()</span>
<span class="w"> </span><span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="n">AddNumbers</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">))</span>
<span class="w"> </span><span class="k">End</span><span class="w"> </span><span class="k">Sub</span>
<span class="k">End</span><span class="w"> </span><span class="k">Class</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Dependency_Walker" title="Dependency Walker">Dependency Walker</a>, Bestandteil des Microsoft Visual Studio bis zur Version 2005, mit dem man sich Funktionen, die ein Programm ex- und importiert, hierarchisch anzeigen lassen kann.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://msdn.microsoft.com/de-de/library/aa271769(VS.60).aspx">Verwenden von _declspec(dllimport) und _declspec(dllexport)</a> bei <a href="MSDN_Library" class="mw-redirect" title="MSDN Library">MSDN Library</a></li>
<li><i><a rel="nofollow" class="external text" href="http://www.functionx.com/visualc/libraries/win32dll.htm">Win32 DLL</a></i> – Anleitung, wie man in C++ mit <a href="Visual_Studio" title="Visual Studio">Visual Studio</a> DLLs erstellen und aufrufen kann (englisch)</li>
<li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20180330223101/http://www.adminzone.org/windows-libraries-i.php">Durch Grafiken und Videos unterstützte Beschreibung der Windows Bibliotheken. Statische Libs und DLLs.</a></li>
<li><a rel="nofollow" class="external text" href="https://devblogs.microsoft.com/oldnewthing/20121227-00/?p=5713"><i>What is so special about the instance handle 0x10000000?</i> by Raymond Chen</a> (englisch)</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://www.computerweekly.com/de/definition/Dynamic-Link-Library-DLL"><i>Was ist Dynamic Link Library (DLL)? - Definition von WhatIs.com.</i></a><span class="Abrufdatum"> Abgerufen am 24.&nbsp;Mai 2022</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ADynamic+Link+Library&amp;rft.title=Was+ist+Dynamic+Link+Library+%28DLL%29%3F+-+Definition+von+WhatIs.com&amp;rft.description=Was+ist+Dynamic+Link+Library+%28DLL%29%3F+-+Definition+von+WhatIs.com&amp;rft.identifier=https%3A%2F%2Fwww.computerweekly.com%2Fde%2Fdefinition%2FDynamic-Link-Library-DLL&amp;rft.language=de">&nbsp;</span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://www.heise.de/tipps-tricks/DLL-Datei-was-ist-das-4613457.html"><i>DLL-Datei - was ist das?</i></a><span class="Abrufdatum"> Abgerufen am 24.&nbsp;Mai 2022</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ADynamic+Link+Library&amp;rft.title=DLL-Datei+-+was+ist+das%3F&amp;rft.description=DLL-Datei+-+was+ist+das%3F&amp;rft.identifier=https%3A%2F%2Fwww.heise.de%2Ftipps-tricks%2FDLL-Datei-was-ist-das-4613457.html&amp;rft.language=de">&nbsp;</span></span>
</li>
<li id="cite_note-NE-3"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-NE_3-0">a</a></sup> <sup><a href="#cite_ref-NE_3-1">b</a></sup></span> <span class="reference-text">K. B. Microsoft: <a rel="nofollow" class="external text" href="http://support.microsoft.com/kb/65122/de">Executable-File Header Format</a></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><span class="cite">Deland-Han: <a rel="nofollow" class="external text" href="https://docs.microsoft.com/de-de/troubleshoot/windows-client/deployment/dynamic-link-library"><i>Dynamic Link Library (DLL) - Windows Client.</i></a><span class="Abrufdatum"> Abgerufen am 24.&nbsp;Mai 2022</span> (deutsch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ADynamic+Link+Library&amp;rft.title=Dynamic+Link+Library+%28DLL%29+-+Windows+Client&amp;rft.description=Dynamic+Link+Library+%28DLL%29+-+Windows+Client&amp;rft.identifier=https%3A%2F%2Fdocs.microsoft.com%2Fde-de%2Ftroubleshoot%2Fwindows-client%2Fdeployment%2Fdynamic-link-library&amp;rft.creator=Deland-Han&amp;rft.language=de-DE">&nbsp;</span></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><span class="cite">corob-msft: <a rel="nofollow" class="external text" href="https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp"><i>Walkthrough: Create and use your own Dynamic Link Library (C++).</i></a><span class="Abrufdatum"> Abgerufen am 24.&nbsp;Mai 2022</span> (amerikanisches Englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ADynamic+Link+Library&amp;rft.title=Walkthrough%3A+Create+and+use+your+own+Dynamic+Link+Library+%28C%2B%2B%29&amp;rft.description=Walkthrough%3A+Create+and+use+your+own+Dynamic+Link+Library+%28C%2B%2B%29&amp;rft.identifier=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fcpp%2Fbuild%2Fwalkthrough-creating-and-using-a-dynamic-link-library-cpp&amp;rft.creator=corob-msft&amp;rft.language=en-US">&nbsp;</span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-08-09" href="https://de.wikipedia.org/wiki/?title=Dynamic_Link_Library&amp;oldid=258707012">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>